﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LunarSF.MarkdownDOM
{
    /// <summary>
    /// 表示 Markdown 文档被解析成的 C# 对象。
    /// </summary>
    public class MDocument
    {
        public MDocument(string mdText)
        {
            this.sourceText = mdText;

            LoadMarkdownDocument();
        }

        /// <summary>
        /// 解析 Markdown 文档。
        /// </summary>
        public void LoadMarkdownDocument()
        {
            #region 第1步，提取文档信息


            #endregion

            #region 第2步，切块（注意：块可能嵌套）



            #endregion


            #region 第3步，对每块进行解析（每段[行]都是1小块）


            #endregion
        }

        private string sourceText = "";

        public string SourceText { get { return this.sourceText; } }

        /// <summary>
        /// 表示文档标题。
        /// </summary>
        public string Title { get; set; } = "Document";

        /// <summary>
        /// 文档页眉文本。
        /// </summary>
        public string PageHeader { get; set; } = "";

        /// <summary>
        /// 文档页脚文本。
        /// </summary>
        public string PageFooter { get; set; } = "";

        /// <summary>
        /// 位于文档首行的文档完成程度文本（一个任务列表项文本行）。
        /// 注：当一个任务列表项文本行位于文件第一行时，它不被视为一般的任务列表项，而是被当作整个文档的完成状态行。
        /// </summary>
        public string ProcessText { get; set; } = "";

        /// <summary>
        /// 以分号开头的、不会被编译的注释。
        /// 注：这种注释用于对文档本身或其部分内容进行说明，不会被视为文档的内容。
        /// </summary>
        public List<string> DocumentComments { get; } = new List<string>();

        /// <summary>
        /// 文档的内容，由各个MBlock组成。MBlock可以是一个代码块/引用块/普通段落/列表/二维文字表/树型文字表/方块/自定义折叠区……。
        /// </summary>
        public List<MBlock> Content { get; } = new List<MBlock>();
    }
}
